const { ipcMain, Notification } = require('electron');
const autoUpdater = require('electron-updater').autoUpdater;
const webConsole = require('./utils/console');

module.exports = (mainWindow) => {
  // 在主进程中.
  ipcMain.on('alertSysMsg', (event, arg) => {
    console.log('> Received message form render, arg:', arg);
    new Notification({ title: arg.title, body: arg.body }).show();
  });

  // Check Update
  autoUpdater.autoDownload = false;
  autoUpdater.setFeedURL('http://localhost:3000/electron/');

  const callback = (arg) =>
    mainWindow.webContents.send('checkUpdate-reply', arg);

  // 当更新发生错误的时候触发。
  autoUpdater.on('error', (error) => {
    if (error.message.includes('sha512 checksum mismatch')) {
      webConsole(mainWindow, error);
      callback({ status: 'error', error });
    }
  });

  // 当开始检查更新的时候触发
  autoUpdater.on('checking-for-update', (event, arg) => {
    callback({ status: 'checking-for-update', arg });
  });

  // 发现可更新数据时
  autoUpdater.on('update-available', (event, arg) => {
    callback({ status: 'update-available', arg });
  });

  // 没有可更新数据时
  autoUpdater.on('update-not-available', (event, arg) => {
    callback({ status: 'update-not-available', arg });
  });

  // 下载监听
  autoUpdater.on('download-progress', (arg) => {
    callback({ status: 'download-progress', arg });
  });

  // 下载完成
  autoUpdater.on('update-downloaded', (arg) => {
    callback({ status: 'update-downloaded', arg });
  });

  ipcMain.on('checkUpdate', (event) => {
    autoUpdater.checkForUpdates().catch((error) => {
      webConsole(mainWindow, error);
      callback({ status: 'error', error });
    });
  });

  // 退出并安装
  ipcMain.on('confirm-update', () => {
    autoUpdater.quitAndInstall();
  });

  // 手动下载更新文件
  ipcMain.on('confirm-downloadUpdate', () => {
    autoUpdater.downloadUpdate();
  });
};
